home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2006 May / PCWMAY06.iso / Software / Freeware / First Page 2006 3.00 / fp2006-final-3.00-setup.exe / {app} / Iscripts / DHTML - Menus / anylink-vertical.izs < prev    next >
Text File  |  2005-09-28  |  14KB  |  417 lines

  1. <!NOWIZARD>
  2.  
  3. <!TITLE>AnyLink Vertical Menu
  4. <!/TITLE>
  5.  
  6. <!BROWSER>FF1+ IE5+ Opr7+<!/BROWSER>
  7.  
  8. <!DESCRIPTION> This is an alternate version of our AnyLink Drop Down Menu that works with vertical links instead. The menu is positioned to the right of the link, and works with most types of links, whether it's a regular text link, image link, or even a table cell or list that happens to contain a link. Furthermore, this script detects the four corners of the browser window and readjusts the menu so it's always in view.
  9.  
  10. The script works in all the major DHTML browsers- IE4+, NS6+, and Opera7+. You can specify a valid default URL for each link for other browsers to navigate to. Cool!
  11.  
  12. <!/DESCRIPTION> 
  13.  
  14. <!CATEGORY>drop down menus<!/CATEGORY>
  15.  
  16. <!SCRIPT>
  17. <!-- START OF SCRIPT -->
  18. <!-- Step 1: Insert the following style sheet and script into the <head> section of your page: -->
  19. <style type="text/css">
  20.  
  21. #dropmenudiv{
  22. position:absolute;
  23. background-color: #E3FFB0;
  24. border:1px solid black;
  25. border-bottom-width: 0;
  26. font:normal 12px Verdana;
  27. line-height:18px;
  28. z-index:100;
  29. }
  30.  
  31. #dropmenudiv a{
  32. width: 100%;
  33. display: block;
  34. text-indent: 3px;
  35. border-bottom: 1px solid black;
  36. padding: 1px 0;
  37. text-decoration: none;
  38. font-weight: bold;
  39. }
  40.  
  41. #dropmenudiv a:hover{ /*hover background color*/
  42. background-color: #C7FF5E;
  43. }
  44.  
  45. /* Sample CSS definition for the example list. Remove if desired */
  46. .navlist li {
  47. list-style-type: square;
  48. width: 135px;
  49. background-color: #FFFFB9;
  50. }
  51.  
  52. </style>
  53.  
  54.  
  55. <script type="text/javascript">
  56.  
  57. /***********************************************
  58. * AnyLink Vertical Menu- ⌐ Dynamic Drive (www.dynamicdrive.com)
  59. * This notice MUST stay intact for legal use
  60. * Visit http://www.dynamicdrive.com/ for full source code
  61. ***********************************************/
  62.  
  63. //Contents for menu 1
  64. var menu1=new Array()
  65. menu1[0]='<a href="http://www.javascriptkit.com">JavaScript Kit</a>'
  66. menu1[1]='<a href="http://www.freewarejava.com">Freewarejava.com</a>'
  67. menu1[2]='<a href="http://codingforums.com">Coding Forums</a>'
  68. menu1[3]='<a href="http://www.cssdrive.com">CSS Drive</a>'
  69. menu1[4]='<a href="http://tools.dynamicdrive.com/imageoptimizer/">Image Optimizer</a>'
  70.  
  71.  
  72. //Contents for menu 2, and so on
  73. var menu2=new Array()
  74. menu2[0]='<a href="http://www.javascriptkit.com/cutpastejava.shtml">Free JavaScripts</a>'
  75. menu2[1]='<a href="http://www.javascriptkit.com/javaindex.shtml">JavaScript tutorials</a>'
  76. menu2[2]='<a href="http://news.bbc.co.uk">JavaScript Reference</a>'
  77. menu2[4]='<a href="http://www.javascriptkit.com/java/">Java Applets</a>'
  78. menu2[3]='<a href="http://www.javascriptkit.com/dhtmltutors/">DHTML & CSS</a>'
  79. menu2[4]='<a href="http://www.javascriptkit.com/howto/">Design Tutorials</a>'
  80.         
  81. var disappeardelay=250  //menu disappear speed onMouseout (in miliseconds)
  82. var horizontaloffset=2 //horizontal offset of menu from default location. (0-5 is a good value)
  83.  
  84. /////No further editting needed
  85.  
  86. var ie4=document.all
  87. var ns6=document.getElementById&&!document.all
  88.  
  89. if (ie4||ns6)
  90. document.write('<div id="dropmenudiv" style="visibility:hidden;width: 160px" onMouseover="clearhidemenu()" onMouseout="dynamichide(event)"></div>')
  91.  
  92. function getposOffset(what, offsettype){
  93. var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
  94. var parentEl=what.offsetParent;
  95. while (parentEl!=null){
  96. totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
  97. parentEl=parentEl.offsetParent;
  98. }
  99. return totaloffset;
  100. }
  101.  
  102.  
  103. function showhide(obj, e, visible, hidden, menuwidth){
  104. if (ie4||ns6)
  105. dropmenuobj.style.left=dropmenuobj.style.top=-500
  106. dropmenuobj.widthobj=dropmenuobj.style
  107. dropmenuobj.widthobj.width=menuwidth
  108. if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover")
  109. obj.visibility=visible
  110. else if (e.type=="click")
  111. obj.visibility=hidden
  112. }
  113.  
  114. function iecompattest(){
  115. return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
  116. }
  117.  
  118. function clearbrowseredge(obj, whichedge){
  119. var edgeoffset=0
  120. if (whichedge=="rightedge"){
  121. var windowedge=ie4 && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15
  122. dropmenuobj.contentmeasure=dropmenuobj.offsetWidth
  123. if (windowedge-dropmenuobj.x-obj.offsetWidth < dropmenuobj.contentmeasure)
  124. edgeoffset=dropmenuobj.contentmeasure+obj.offsetWidth
  125. }
  126. else{
  127. var topedge=ie4 && !window.opera? iecompattest().scrollTop : window.pageYOffset
  128. var windowedge=ie4 && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18
  129. dropmenuobj.contentmeasure=dropmenuobj.offsetHeight
  130. if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure){ //move menu up?
  131. edgeoffset=dropmenuobj.contentmeasure-obj.offsetHeight
  132. if ((dropmenuobj.y-topedge)<dropmenuobj.contentmeasure) //up no good either? (position at top of viewable window then)
  133. edgeoffset=dropmenuobj.y
  134. }
  135. }
  136. return edgeoffset
  137. }
  138.  
  139. function populatemenu(what){
  140. if (ie4||ns6)
  141. dropmenuobj.innerHTML=what.join("")
  142. }
  143.  
  144.  
  145. function dropdownmenu(obj, e, menucontents, menuwidth){
  146. if (window.event) event.cancelBubble=true
  147. else if (e.stopPropagation) e.stopPropagation()
  148. clearhidemenu()
  149. dropmenuobj=document.getElementById? document.getElementById("dropmenudiv") : dropmenudiv
  150. populatemenu(menucontents)
  151.  
  152. if (ie4||ns6){
  153. showhide(dropmenuobj.style, e, "visible", "hidden", menuwidth)
  154. dropmenuobj.x=getposOffset(obj, "left")
  155. dropmenuobj.y=getposOffset(obj, "top")
  156. dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+obj.offsetWidth+horizontaloffset+"px"
  157. dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+"px"
  158. }
  159.  
  160. return clickreturnvalue()
  161. }
  162.  
  163. function clickreturnvalue(){
  164. if (ie4||ns6) return false
  165. else return true
  166. }
  167.  
  168. function contains_ns6(a, b) {
  169. while (b.parentNode)
  170. if ((b = b.parentNode) == a)
  171. return true;
  172. return false;
  173. }
  174.  
  175. function dynamichide(e){
  176. if (ie4&&!dropmenuobj.contains(e.toElement))
  177. delayhidemenu()
  178. else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget))
  179. delayhidemenu()
  180. }
  181.  
  182. function hidemenu(e){
  183. if (typeof dropmenuobj!="undefined"){
  184. if (ie4||ns6)
  185. dropmenuobj.style.visibility="hidden"
  186. }
  187. }
  188.  
  189. function delayhidemenu(){
  190. if (ie4||ns6)
  191. delayhide=setTimeout("hidemenu()",disappeardelay)
  192. }
  193.  
  194. function clearhidemenu(){
  195. if (typeof delayhide!="undefined")
  196. clearTimeout(delayhide)
  197. }
  198.  
  199. </script>
  200. <!-- Step 2: Having done the above, all that's left is setting up your link(s) so a menu drops down. The below sample HTML demonstrates setting up the menu on either a regular text link or a list element (<li>): -->
  201. <a href="default.htm" onMouseover="dropdownmenu(this, event, menu1, '165px')" onMouseout="delayhidemenu()">Webmaster Links</a><br />
  202.  
  203. <!-- Activate menu onclick instead 
  204. <a href="default.htm" onClick="return dropdownmenu(this, event, menu1, '165px')" onMouseout="delayhidemenu()">Webmaster Links</a><br />
  205. -->
  206.  
  207. <ul class="navlist">
  208. <li><a href="http://www.dynamicdrive.com">Dynamic Drive</a></li>
  209. <li onMouseover="dropdownmenu(this, event, menu2, '150px')" onMouseout="delayhidemenu()"><a href="http://www.javascriptkit.com">JavaScript Kit</a> <span style="position: relative; left: 30px">></span></li>
  210. <li><a href="http://www.cssdrive.com">CSS Drive</a></li>
  211. <li><a href="http://www.codingforums.com">Coding Forums</a></li>
  212. </ul>
  213. <!-- END OF SCRIPT -->
  214. <!/SCRIPT>
  215.  
  216. <!PREVIEW>
  217. <!-- START OF SCRIPT -->
  218.  
  219. <!-- Step 1: Insert the following style sheet and script into the <head> section of your page: -->
  220. <style type="text/css">
  221.  
  222. #dropmenudiv{
  223. position:absolute;
  224. background-color: #E3FFB0;
  225. border:1px solid black;
  226. border-bottom-width: 0;
  227. font:normal 12px Verdana;
  228. line-height:18px;
  229. z-index:100;
  230. }
  231.  
  232. #dropmenudiv a{
  233. width: 100%;
  234. display: block;
  235. text-indent: 3px;
  236. border-bottom: 1px solid black;
  237. padding: 1px 0;
  238. text-decoration: none;
  239. font-weight: bold;
  240. }
  241.  
  242. #dropmenudiv a:hover{ /*hover background color*/
  243. background-color: #C7FF5E;
  244. }
  245.  
  246. /* Sample CSS definition for the example list. Remove if desired */
  247. .navlist li {
  248. list-style-type: square;
  249. width: 135px;
  250. background-color: #FFFFB9;
  251. }
  252.  
  253. </style>
  254.  
  255.  
  256. <script type="text/javascript">
  257.  
  258. /***********************************************
  259. * AnyLink Vertical Menu- ⌐ Dynamic Drive (www.dynamicdrive.com)
  260. * This notice MUST stay intact for legal use
  261. * Visit http://www.dynamicdrive.com/ for full source code
  262. ***********************************************/
  263.  
  264. //Contents for menu 1
  265. var menu1=new Array()
  266. menu1[0]='<a href="http://www.javascriptkit.com">JavaScript Kit</a>'
  267. menu1[1]='<a href="http://www.freewarejava.com">Freewarejava.com</a>'
  268. menu1[2]='<a href="http://codingforums.com">Coding Forums</a>'
  269. menu1[3]='<a href="http://www.cssdrive.com">CSS Drive</a>'
  270. menu1[4]='<a href="http://tools.dynamicdrive.com/imageoptimizer/">Image Optimizer</a>'
  271.  
  272.  
  273. //Contents for menu 2, and so on
  274. var menu2=new Array()
  275. menu2[0]='<a href="http://www.javascriptkit.com/cutpastejava.shtml">Free JavaScripts</a>'
  276. menu2[1]='<a href="http://www.javascriptkit.com/javaindex.shtml">JavaScript tutorials</a>'
  277. menu2[2]='<a href="http://news.bbc.co.uk">JavaScript Reference</a>'
  278. menu2[4]='<a href="http://www.javascriptkit.com/java/">Java Applets</a>'
  279. menu2[3]='<a href="http://www.javascriptkit.com/dhtmltutors/">DHTML & CSS</a>'
  280. menu2[4]='<a href="http://www.javascriptkit.com/howto/">Design Tutorials</a>'
  281.         
  282. var disappeardelay=250  //menu disappear speed onMouseout (in miliseconds)
  283. var horizontaloffset=2 //horizontal offset of menu from default location. (0-5 is a good value)
  284.  
  285. /////No further editting needed
  286.  
  287. var ie4=document.all
  288. var ns6=document.getElementById&&!document.all
  289.  
  290. if (ie4||ns6)
  291. document.write('<div id="dropmenudiv" style="visibility:hidden;width: 160px" onMouseover="clearhidemenu()" onMouseout="dynamichide(event)"></div>')
  292.  
  293. function getposOffset(what, offsettype){
  294. var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
  295. var parentEl=what.offsetParent;
  296. while (parentEl!=null){
  297. totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
  298. parentEl=parentEl.offsetParent;
  299. }
  300. return totaloffset;
  301. }
  302.  
  303.  
  304. function showhide(obj, e, visible, hidden, menuwidth){
  305. if (ie4||ns6)
  306. dropmenuobj.style.left=dropmenuobj.style.top=-500
  307. dropmenuobj.widthobj=dropmenuobj.style
  308. dropmenuobj.widthobj.width=menuwidth
  309. if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover")
  310. obj.visibility=visible
  311. else if (e.type=="click")
  312. obj.visibility=hidden
  313. }
  314.  
  315. function iecompattest(){
  316. return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
  317. }
  318.  
  319. function clearbrowseredge(obj, whichedge){
  320. var edgeoffset=0
  321. if (whichedge=="rightedge"){
  322. var windowedge=ie4 && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15
  323. dropmenuobj.contentmeasure=dropmenuobj.offsetWidth
  324. if (windowedge-dropmenuobj.x-obj.offsetWidth < dropmenuobj.contentmeasure)
  325. edgeoffset=dropmenuobj.contentmeasure+obj.offsetWidth
  326. }
  327. else{
  328. var topedge=ie4 && !window.opera? iecompattest().scrollTop : window.pageYOffset
  329. var windowedge=ie4 && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18
  330. dropmenuobj.contentmeasure=dropmenuobj.offsetHeight
  331. if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure){ //move menu up?
  332. edgeoffset=dropmenuobj.contentmeasure-obj.offsetHeight
  333. if ((dropmenuobj.y-topedge)<dropmenuobj.contentmeasure) //up no good either? (position at top of viewable window then)
  334. edgeoffset=dropmenuobj.y
  335. }
  336. }
  337. return edgeoffset
  338. }
  339.  
  340. function populatemenu(what){
  341. if (ie4||ns6)
  342. dropmenuobj.innerHTML=what.join("")
  343. }
  344.  
  345.  
  346. function dropdownmenu(obj, e, menucontents, menuwidth){
  347. if (window.event) event.cancelBubble=true
  348. else if (e.stopPropagation) e.stopPropagation()
  349. clearhidemenu()
  350. dropmenuobj=document.getElementById? document.getElementById("dropmenudiv") : dropmenudiv
  351. populatemenu(menucontents)
  352.  
  353. if (ie4||ns6){
  354. showhide(dropmenuobj.style, e, "visible", "hidden", menuwidth)
  355. dropmenuobj.x=getposOffset(obj, "left")
  356. dropmenuobj.y=getposOffset(obj, "top")
  357. dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+obj.offsetWidth+horizontaloffset+"px"
  358. dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+"px"
  359. }
  360.  
  361. return clickreturnvalue()
  362. }
  363.  
  364. function clickreturnvalue(){
  365. if (ie4||ns6) return false
  366. else return true
  367. }
  368.  
  369. function contains_ns6(a, b) {
  370. while (b.parentNode)
  371. if ((b = b.parentNode) == a)
  372. return true;
  373. return false;
  374. }
  375.  
  376. function dynamichide(e){
  377. if (ie4&&!dropmenuobj.contains(e.toElement))
  378. delayhidemenu()
  379. else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget))
  380. delayhidemenu()
  381. }
  382.  
  383. function hidemenu(e){
  384. if (typeof dropmenuobj!="undefined"){
  385. if (ie4||ns6)
  386. dropmenuobj.style.visibility="hidden"
  387. }
  388. }
  389.  
  390. function delayhidemenu(){
  391. if (ie4||ns6)
  392. delayhide=setTimeout("hidemenu()",disappeardelay)
  393. }
  394.  
  395. function clearhidemenu(){
  396. if (typeof delayhide!="undefined")
  397. clearTimeout(delayhide)
  398. }
  399.  
  400. </script>
  401. <!-- Step 2: Having done the above, all that's left is setting up your link(s) so a menu drops down. The below sample HTML demonstrates setting up the menu on either a regular text link or a list element (<li>): -->
  402. <a href="default.htm" onMouseover="dropdownmenu(this, event, menu1, '165px')" onMouseout="delayhidemenu()">Webmaster Links</a><br />
  403.  
  404. <!-- Activate menu onclick instead 
  405. <a href="default.htm" onClick="return dropdownmenu(this, event, menu1, '165px')" onMouseout="delayhidemenu()">Webmaster Links</a><br />
  406. -->
  407.  
  408. <ul class="navlist">
  409. <li><a href="http://www.dynamicdrive.com">Dynamic Drive</a></li>
  410. <li onMouseover="dropdownmenu(this, event, menu2, '150px')" onMouseout="delayhidemenu()"><a href="http://www.javascriptkit.com">JavaScript Kit</a> <span style="position: relative; left: 30px">></span></li>
  411. <li><a href="http://www.cssdrive.com">CSS Drive</a></li>
  412. <li><a href="http://www.codingforums.com">Coding Forums</a></li>
  413. </ul>
  414. <!-- END OF SCRIPT -->
  415. <!/PREVIEW>
  416.  
  417. <!RELATED>NONE<!/RELATED>